【概念篇】生成器Generator和迭代器Interator

迭代器Interator

实质

依次获取容器内的元素,没获取一次可标记获取元素的位置。

  • 可循环获取元素的类型均可称之可迭代类型
  • 迭代器就是实现了工厂模式的对象,在询问下一个数据时返回

包含类型

  • 列表
  • 字典
  • set

小例子

#可迭代对象
x = [1,2,3]
y = iter(x)
next(y)       # 1
next(y)       # 2

# 无限迭代器
from itertools import count
counter = count(start=13)
next(counter)

# 有限序列对应的无限迭代器(循环提取)
from itertools import cycle
colors = cycle(['red', 'white', 'blue'])
next(colors)

# 无限序列产生有限迭代器
from itertools import islice
colors = cycle(['red', 'white', 'blue'])
limited = islice(colors, 0, 4)

生成器Generator

实质

一种特殊的迭代器。

生成器实质是定义了所需的计算模式,但是在实际需要的时候才会计算相应位置的数据。即实现了延迟操作。

在函数计算中,不通过return返回结果,而是yield返回类似迭代器的东东

实现类型

  • 生成器函数
  • 生成器表达式

小例子

# 生成器函数和一般函数
def generat(N):
    for i in range(N):
        yield i ** 2

def squares(N):
    res = []
    for i in range(N):
        res.append(i ** 2)
    return res


# 生成器表达式和一般表达式
generat = (i**2 for i in range(5))
squares = [i**2 for i in range(5)]

优点

  • 优化内存,减少存储空间的使用
  • 增强代码可读性

results matching ""

    No results matching ""